From bc510c7fd59ff4db07bc090e35a7307e799bd70a Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Wed, 14 Mar 2007 11:09:13 +0000 Subject: [PATCH] AMD HVM: Fix enter-realmode stub to initialise 32-bit GPRs. This fixes booting Ubuntu live ISO, which assumes the upper half of %esp is zero on entry. Signed-off-by: Keir Fraser --- tools/firmware/hvmloader/hvmloader.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index 6b75303477..8bed54835a 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -62,15 +62,21 @@ asm( " mov %ax,%fs \n" " mov %ax,%gs \n" " mov %ax,%ss \n" - " ljmp $0x8,$0x0 \n" + /* Initialise all 32-bit GPRs to zero. */ + " xor %eax,%eax \n" + " xor %ebx,%ebx \n" + " xor %ecx,%ecx \n" + " xor %edx,%edx \n" + " xor %esp,%esp \n" + " xor %ebp,%ebp \n" + " xor %esi,%esi \n" + " xor %edi,%edi \n" /* Enter real mode, reload all segment registers and IDT. */ + " ljmp $0x8,$0x0 \n" "trampoline_start: .code16 \n" - " mov %cr0,%eax \n" - " and $0xfe,%al \n" " mov %eax,%cr0 \n" " ljmp $0,$1f-trampoline_start\n" - "1: xor %ax,%ax \n" - " mov %ax,%ds \n" + "1: mov %ax,%ds \n" " mov %ax,%es \n" " mov %ax,%fs \n" " mov %ax,%gs \n" -- 2.30.2